/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucsur.puntodeventas.dataaccess;

import edu.ucsur.puntodeventas.businessentity.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author JORGE
 */
public class ADCliente {
    
    /* INICIO: Singleton */
    private static ADCliente _instance = null;

    public static ADCliente Instance()
    {
        if (_instance == null)
            _instance = new ADCliente();
        return _instance;    
    }
    /* FIN: Singleton */
    
    private Connection conn;    
    public boolean insertar(ENCliente oENCliente) throws Exception 
    {
        try 
        {
            conn = ADDBConnection.getConnection();
            //-- Armando la sentencia SQL
            String sql = "insert into Cliente ( idTipoDocumento, sNroDocumento, sNombres, sApePaterno, sApeMaterno, sDireccion) " +
                        " values ( ?, ?, ?, ?, ?, ?)";
            //-- Preparando la sentencia en Java
            PreparedStatement pstmt = conn.prepareStatement(sql);
            //-- ¿Y como seteamos los parametros?
            //-- Simple, con setters
            pstmt.setInt(1, oENCliente.getidTipoDocumento());
            pstmt.setString(2, oENCliente.getsNroDocumento());
            pstmt.setString(3, oENCliente.getsNombres());
            pstmt.setString(4, oENCliente.getsApePaterno());
            pstmt.setString(5, oENCliente.getsApeMaterno());
            pstmt.setString(6, oENCliente.getsDireccion());
            //-- Una vez que el SQL está listo para ejecutarse
            //-- se lanza. El resultado se recibe en una variable
            //-- de tipo ResultSet (cursor)
            pstmt.execute();
            return true;
            }
        catch (Exception ex) 
        {
            ex.printStackTrace();
            throw ex;
        } 
        finally 
        {
            conn.close();
        }
    }
    
    public List<ENCliente> listar() throws Exception {
        try {
            conn = ADDBConnection.getConnection();
            List<ENCliente> oListENCliente = new ArrayList<ENCliente>();
            
            String sql = "select * from Cliente ";
            //-- Preparando la sentencia en Java
            Statement pstmt = conn.createStatement();
            //-- Una vez que el SQL está listo para ejecutarse
            //-- se lanza. El resultado se recibe en una variable
            //-- de tipo ResultSet (cursor)
            ResultSet rs = pstmt.executeQuery(sql);
            //-- Recorriendo el resultset
            while (rs.next()) {
            ENCliente oENCliente = new ENCliente();
            oENCliente.setidCliente(rs.getInt("idCliente"));
            oENCliente.setidTipoDocumento(rs.getInt("idTipoDocumento"));
            oENCliente.setsNroDocumento(rs.getString("sNroDocumento"));
            oENCliente.setsNombres(rs.getString("sNombres"));
            oENCliente.setsApePaterno(rs.getString("sApePaterno"));
            oENCliente.setsApeMaterno(rs.getString("sApeMaterno"));
            oENCliente.setsDireccion(rs.getString("sDireccion"));
            
            oListENCliente.add(oENCliente);
            }
            return oListENCliente;
        } catch (Exception ex) {
            ex.printStackTrace();
            throw ex;
        } finally {
            conn.close();
        }
    }
    
}
